Skip to content

CAMEL-24367: Add camel-rest-postman component - #25390

Open
christosgkoros wants to merge 4 commits into
apache:mainfrom
christosgkoros:feat/camel-rest-postman-component
Open

CAMEL-24367: Add camel-rest-postman component#25390
christosgkoros wants to merge 4 commits into
apache:mainfrom
christosgkoros:feat/camel-rest-postman-component

Conversation

@christosgkoros

@christosgkoros christosgkoros commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

JIRA: https://issues.apache.org/jira/browse/CAMEL-24367

What this adds

A new camel-rest-postman component that configures REST producers and contract-first REST consumers from a Postman Collection instead of an OpenAPI specification. It is the Postman counterpart of camel-rest-openapi: it performs no HTTP itself and delegates to a component implementing RestProducerFactory.

The motivation is that a large number of teams keep a Postman Collection as the only machine-readable description of their API, and today Camel has no way to consume that.

The collection is loaded either from a Collection v2.1 JSON document (classpath:, file:, http:) or, by its uid, from the Postman cloud.

Usage

// invoke one request
from("direct:start")
    .to("rest-postman:petstore.json#getPetById");

// run every request of a folder, or of the whole collection, like Postman's collection runner
from("timer:smoke?period=60000")
    .to("rest-postman:petstore.json#pets");

// serve the collection's requests, dispatching each to direct:<requestId>
from("rest-postman:petstore.json")
    .to("direct:dummy");

Multi-request runs return a List<PostmanRunResult> (status, body, headers, per-request failure), with runFailFast controlling whether the first failure aborts the run.

Design notes

Addressing requests. Postman items have a human name rather than an operation id, so the name is slugified (Get Pet By IdgetPetById), folder-qualified (pets/getPetById) when a name is not unique. item.id is accepted too, but note it is optional in the v2.1 schema and Postman's exporter strips it, so exported collections are normally addressed by slug and cloud-fetched ones by id. Both work.

Two credentials, deliberately named apart. postmanApiKey authenticates against Postman in order to download a collection; it is never sent to the API the collection describes. The collection's own auth block authenticates against that API and is governed by collectionAuth, which defaults to ignore (with a startup warning naming the type found) because those values are usually unresolved {{placeholders}}, and silently attaching a credential found in a config file to outbound requests is surprising. An e2e test asserts the separation.

Security. Redirects from postmanApiUrl are rejected rather than followed, since following one would replay the API key to the redirect target; postmanApiUrl must be HTTPS except for loopback; reads are bounded (8 MiB, 5000 items, 64 folder levels); apiContextPath serves the collection with every auth block and every type: secret variable removed, unconditionally. Postman event scripts are never parsed or executed.

No new third-party dependency. The collection is parsed with camel-util-json, already on the classpath via camel-support.

Testing

  • 167 tests in camel-rest-postman
  • 8 contract-first consumer tests in camel-platform-http-vertx, following the precedent that rest-openapi's consumer tests live there because PlatformHttpComponent is the only RestOpenApiConsumerFactory implementation
  • mvn clean install -Psourcecheck passes on both modified modules

Review feedback addressed

Changes since the first push, in response to @davsclaus's review:

  • JIRACAMEL-24367 now referenced in the commit message and PR title.
  • Upgrade guide — the new-component section has been removed; camel-4x-upgrade-guide-4_22.adoc is now byte-identical to main. The component's own .adoc page carries that documentation.
  • consumerComponentName description — no longer names the OpenAPI SPI class; it now describes the capability ("must be able to service contract-first REST consumers, as platform-http does").
  • Exception wrapping — the two new RuntimeException(e) sites in RestPostmanProcessor now use RuntimeCamelException.wrapRuntimeCamelException(e).

Known gap

For a path the collection does describe, a wrong-method request currently gets a 405 from the vert.x router before this component's processor runs, and the router leaves Allow empty. rest-openapi populates Allow in the equivalent case, so the difference is mine; the processor's own 404/405 handling (with Allow) still applies to paths the router has no route for. I would appreciate a pointer here if the cause is obvious to someone who knows platform-http well.


This contribution was AI-assisted: written with Claude Code (Claude Opus) on behalf of @christosgkoros, who reviewed the design decisions. Commits carry a Co-Authored-By trailer.

@davsclaus davsclaus left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for this well-designed component, @christosgkoros — the security measures (redirect rejection, HTTPS enforcement, bounded reads, auth stripping, variable recursion limits) are all substantiated by the code, the test suite is thorough (122 test methods, all AssertJ, all package-private, no Thread.sleep), and there are no new runtime dependencies.

Two things need addressing before this can merge, plus a few suggestions below.

Blocking

  1. Missing JIRA ticket — no CAMEL-XXXXX issue is linked anywhere (PR title, description, commits, branch name). Per project guidelines, a JIRA ticket is required. Please create one and update the branch/commits accordingly (feature/CAMEL-XXXXX-rest-postman, CAMEL-XXXXX: Add camel-rest-postman component).

  2. Upgrade guide misuse — the 37-line new-component section added to camel-4x-upgrade-guide-4_22.adoc should be removed. Per project conventions, the upgrade guide is for migration only — new features should not be documented there. The component's own .adoc page (which is well-written) is the right place.

Design note

Reusing RestOpenApiConsumerFactory — this is fine, no need for a new SPI. The contract is generic enough and PlatformHttpComponent is its only implementation. Just be aware the parameter description for consumerComponentName says "RestOpenApiConsumerFactory" which may confuse users — consider describing the capability generically instead of naming the SPI class.


This review covers project rules and conventions. It does not replace specialised tools (CodeRabbit, SonarCloud) for deep static analysis.

This review was generated by an AI agent and may contain inaccuracies. Please verify all suggestions before applying.

Claude Code on behalf of davsclaus

Comment thread docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_22.adoc Outdated
@davsclaus

Copy link
Copy Markdown
Contributor

@christosgkoros
christosgkoros force-pushed the feat/camel-rest-postman-component branch from 73a054b to c348957 Compare August 6, 2026 23:34
@christosgkoros
christosgkoros deleted the feat/camel-rest-postman-component branch August 6, 2026 23:34
@christosgkoros
christosgkoros restored the feat/camel-rest-postman-component branch August 6, 2026 23:35
@christosgkoros christosgkoros reopened this Aug 6, 2026
@christosgkoros christosgkoros changed the title Add camel-rest-postman component CAMEL-24367: Add camel-rest-postman component Aug 6, 2026
@christosgkoros

Copy link
Copy Markdown
Contributor Author

Thanks for the review @davsclaus, and for creating CAMEL-24367. All four points are addressed in the force-pushed commit c348957.

1. JIRA — the commit message and PR title are now CAMEL-24367: Add camel-rest-postman component.

On the branch name: I tried renaming it to feature/CAMEL-24367-rest-postman and that closed this PR — GitHub does not carry a pull request across a branch rename when the head is on a fork. I renamed it back and reopened, so the branch is still feat/camel-rest-postman-component and this thread is intact. If you would rather have the branch name match the convention, say so and I will open a fresh PR from a correctly named branch and link back to this one; I did not want to throw away the review thread unilaterally.

2. Upgrade guide — the 37-line section is removed. camel-4x-upgrade-guide-4_22.adoc is now byte-identical to main, and the documentation lives only in rest-postman-component.adoc.

One observation while doing this, purely FYI: the same file currently has === camel-clickhouse (new component) and === camel-duckdb (new component) sections, which is what I patterned mine on. Happy to leave those alone — just flagging in case they should also be cleaned up.

3. consumerComponentName description — good catch, it no longer names the OpenAPI SPI:

Name of the Camel component that will service the requests. The component must be present in Camel registry and it must be able to service contract-first REST consumers, as platform-http does. If not set CLASSPATH is searched for a single component with that capability.

4. RuntimeException wrapping — both sites in RestPostmanProcessor now use RuntimeCamelException.wrapRuntimeCamelException(e).

Thanks also for confirming the RestOpenApiConsumerFactory reuse is acceptable — that was the design call I was least sure about.

Rebuilt and re-verified after the changes: 167 tests in camel-rest-postman and 8 consumer tests in camel-platform-http-vertx all pass, and mvn clean install -Psourcecheck is clean on both modules.

Claude Code on behalf of @christosgkoros

@davsclaus

Copy link
Copy Markdown
Contributor

Ad 2)
that was a mistake both has been removed

@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

🌟 Thank you for your contribution to the Apache Camel project! 🌟
🤖 CI automation will test this PR automatically.

🐫 Apache Camel Committers, please review the following items:

  • First-time contributors require MANUAL approval for the GitHub Actions to run
  • You can use the command /component-test (camel-)component-name1 (camel-)component-name2.. to request a test from the test bot although they are normally detected and executed by CI.
  • You can label PRs using skip-tests and test-dependents to fine-tune the checks executed by this PR.
  • Build and test logs are available in the summary page. Only Apache Camel committers have access to the summary.

⚠️ Be careful when sharing logs. Review their contents before sharing them publicly.

@davsclaus

Copy link
Copy Markdown
Contributor

[05:56:02.037] WARN (asciidoctor): skipping reference to missing attribute: petid
file: /home/runner/work/camel/camel/camel/docs/components/modules/ROOT/pages/rest-postman-component.adoc
source: /home/runner/work/camel/camel/camel (branch: HEAD | start path: docs/components)
[05:56:02.041] WARN (asciidoctor): skipping reference to missing attribute: baseurl
file: /home/runner/work/camel/camel/camel/docs/components/modules/ROOT/pages/rest-postman-component.adoc
source: /home/runner/work/camel/camel/camel (branch: HEAD | start path: docs/components)
[05:56:02.042] WARN (asciidoctor): skipping reference to missing attribute: variable
file: /home/runner/work/camel/camel/camel/docs/components/modules/ROOT/pages/rest-postman-component.adoc
source: /home/runner/work/camel/camel/camel (branch: HEAD | start path: docs/components)
[05:56:02.043] WARN (asciidoctor): skipping reference to missing attribute: placeholders
file: /home/runner/work/camel/camel/camel/docs/components/modules/ROOT/pages/rest-postman-component.adoc
source: /home/runner/work/camel/camel/camel (branch: HEAD | start path: docs/components)

@christosgkoros

Copy link
Copy Markdown
Contributor Author

The Validate documentation job failure was caused by this PR — pushed a fix in 6607c56.

The site build produced exactly four asciidoctor warnings and all four were in rest-postman-component.adoc; the job treats warnings as failures:

WARN (asciidoctor): skipping reference to missing attribute: petid
WARN (asciidoctor): skipping reference to missing attribute: baseurl
WARN (asciidoctor): skipping reference to missing attribute: variable
WARN (asciidoctor): skipping reference to missing attribute: placeholders

AsciiDoc was parsing the brace spans as attribute references rather than literal text. They are now wrapped in an inline passthrough (`+{petId}+`, `+{{baseUrl}}+`), which suppresses substitution. I used a passthrough rather than the backslash escaping used in rest-openapi-component.adoc, because Postman's doubled braces make \{\{baseUrl}} awkward to read — happy to switch if you prefer consistency with the existing page.

Note that the same job log also contains unix-dgram / node-gyp native build errors from the camel-website toolchain. Those are unrelated to this PR and did not fail the job — the Antora build ran to completion afterwards.

I have left this as a separate commit so the change since your review is visible; it should be squashed at merge.

Claude Code on behalf of @christosgkoros

@davsclaus

Copy link
Copy Markdown
Contributor

There are uncommitted changes
HEAD detached at pull/25390/merge
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git restore ..." to discard changes in working directory)
modified: catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/rest-postman-component.adoc
modified: core/camel-util/src/main/java/org/apache/camel/util/SensitiveUtils.java
modified: dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/RestPostmanComponentBuilderFactory.java
modified: dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/RestPostmanEndpointBuilderFactory.java

@christosgkoros

Copy link
Copy Markdown
Contributor Author

Fixed in d4c5f8e. You were right — those four files were derived from the two changes I made in response to your review, and I had regenerated only some of the downstream artefacts.

File Why it was stale
catalog copy of rest-postman-component.adoc not regenerated after the AsciiDoc passthrough fix
RestPostmanComponentBuilderFactory not regenerated after the consumerComponentName reword
RestPostmanEndpointBuilderFactory same
SensitiveUtils see below

SensitiveUtils was a different problem: my commit carried an unintended re-indentation of the // SENSITIVE-PATTERN: END marker that the generator does not produce. It is reverted, so that file now differs from main only by the two postmanapikey entries. I confirmed formatter:format and impsort:sort leave it alone, so it should not drift again.

To make sure this is actually fixed rather than just locally plausible, I reproduced what CI does end to end:

mvn install -Dquickly                                    # BUILD SUCCESS
mvn install -DskipTests -pl catalog/camel-catalog,core/camel-util,\
    dsl/camel-componentdsl,dsl/camel-endpointdsl,dsl/camel-kamelet-main,docs
                                                         # BUILD SUCCESS
git status --short                                       # empty

Also confirmed on the previous run that this was the only real failure: on 6607c56 the JDK 25 maven build step passed and only Fail if there are uncommitted changes failed; JDK 17 was cancelled by fail-fast rather than failing on its own. The Validate documentation job went green, so the asciidoctor fix worked.

While I was at it I checked that RestOpenApiConsumerFactory no longer appears in any user-facing text — docs, catalog json, or the generated DSL builders. It remains only in the Java code, where it is the actual API being called.

Claude Code on behalf of @christosgkoros

@davsclaus davsclaus left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR #25390 Review: CAMEL-24367 — Add camel-rest-postman component

Nice work on this — the component is well-structured and the security posture around the Postman API key is notably thorough (redirect prevention, HTTPS enforcement, bounded reads, auth redaction, SHA-256 cache keys). Two things worth considering:

Findings

1. Variable resolver allows Camel property expansion from collection content (Medium — security documentation)

  • PostmanVariableResolver.lookup() falls back to camelContext.resolvePropertyPlaceholders("{{" + name + "}}") where name originates from collection content. If a cloud-sourced collection (editable by anyone with Postman workspace access) contains {{env:AWS_SECRET_ACCESS_KEY}} or {{sys:user.home}}, Camel's resolver would expand those, and the values could appear in outbound HTTP request URLs or headers.
  • While the route author controls the collection source, this is a trust-boundary concern. Consider either (a) documenting this risk in the component adoc, or (b) restricting the fallback to names that don't contain : (which would block env:, sys:, bean: prefixes).

2. Per-call HttpClient creation in PostmanCloudClient.fetchCollection() (Low)

  • Each call creates a new java.net.http.HttpClient, which allocates an internal thread pool. Under repeated cache misses this wastes OS threads. The client could be built once and reused.

Questions

  • Sub-exchange lifecycle in RestPostmanRunnerProducer.process() — Sub-exchanges created inside the runner loop are never explicitly released via releaseUnitOfWork(). Under heavy concurrent use this relies on GC rather than deterministic cleanup. Is this intentional?

Positive observations

  • Clean Camel component conventions: DefaultComponent/DefaultEndpoint, proper annotations, SSLContextParametersAware, no Lombok, records only for internals
  • Security is unusually solid: redirect prevention, HTTPS enforcement, bounded reads (8 MiB / 5000 items / 64 depth), auth redaction, secret variable scrubbing, event scripts never parsed
  • No new third-party dependencies — entire parser uses camel-util-json
  • Strong test coverage: 14 test files, 167+ tests, WireMock for cloud API, consumer tests in camel-platform-http-vertx
  • Commit conventions followed (CAMEL-24367: ...), JIRA linked, AI assistance disclosed
  • SensitiveUtils.java change is auto-generated — standard for new secret options

This review was generated by an AI agent and may contain inaccuracies. Please verify all suggestions before applying.

@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

🧪 CI tested the following changed modules:

  • bom/camel-bom
  • catalog/camel-allcomponents
  • catalog/camel-catalog
  • components
  • components/camel-platform-http-vertx
  • components/camel-rest-postman
  • core/camel-main
  • core/camel-util
  • docs
  • dsl/camel-componentdsl
  • dsl/camel-endpointdsl
  • dsl/camel-kamelet-main
  • parent

ℹ️ Dependent modules were not tested because the total number of affected modules exceeded the threshold (50). Use the test-dependents label to force testing all dependents.


🔬 Scalpel shadow comparison — Scalpel: 572 tested, 23 compile-only — current: 565 all tested

Maveniverse Scalpel detected 595 affected modules (current approach: 565).

⚠️ Modules only in Scalpel (30)
  • apache-camel
  • camel-allcomponents
  • camel-bom
  • camel-catalog
  • camel-catalog-console
  • camel-catalog-lucene
  • camel-catalog-maven
  • camel-catalog-suggest
  • camel-componentdsl
  • camel-csimple-maven-plugin
  • camel-endpointdsl
  • camel-endpointdsl-support
  • camel-itest
  • camel-jbang-core
  • camel-jbang-it
  • camel-jbang-main
  • camel-jbang-plugin-edit
  • camel-jbang-plugin-generate
  • camel-jbang-plugin-kubernetes
  • camel-jbang-plugin-test
  • camel-kamelet-main
  • camel-launcher
  • camel-report-maven-plugin
  • camel-route-parser
  • camel-yaml-dsl
  • camel-yaml-dsl-deserializers
  • camel-yaml-dsl-maven-plugin
  • coverage
  • docs
  • dummy-component

Changed managed dependencies: org.apache.camel:camel-rest-postman

Skip-tests mode would test 572 modules (11 direct + 561 downstream), skip tests for 23 (generated code, meta-modules)

Modules Scalpel would test (572)
  • archetypes
  • camel-a2a
  • camel-activemq
  • camel-activemq6
  • camel-ai-parent
  • camel-ai-tool
  • camel-allcomponents
  • camel-amqp
  • camel-api
  • camel-api-component-maven-plugin
  • camel-arangodb
  • camel-archetype-api-component
  • camel-archetype-component
  • camel-archetype-dataformat
  • camel-archetype-java
  • camel-archetype-main
  • camel-archetype-spring
  • camel-as2
  • camel-as2-api
  • camel-as2-parent
  • camel-asn1
  • camel-asterisk
  • camel-atmosphere-websocket
  • camel-atom
  • camel-attachments
  • camel-avro
  • camel-avro-rpc
  • camel-avro-rpc-jetty
  • camel-avro-rpc-parent
  • camel-avro-rpc-spi
  • camel-aws-bedrock
  • camel-aws-cloudtrail
  • camel-aws-common
  • camel-aws-config
  • camel-aws-parameter-store
  • camel-aws-parent
  • camel-aws-secrets-manager
  • camel-aws-security-hub
  • camel-aws2-athena
  • camel-aws2-comprehend
  • camel-aws2-cw
  • camel-aws2-ddb
  • camel-aws2-ec2
  • camel-aws2-ecs
  • camel-aws2-eks
  • camel-aws2-eventbridge
  • camel-aws2-iam
  • camel-aws2-kinesis
  • camel-aws2-kms
  • camel-aws2-lambda
  • camel-aws2-mq
  • camel-aws2-msk
  • camel-aws2-polly
  • camel-aws2-redshift
  • camel-aws2-rekognition
  • camel-aws2-s3
  • camel-aws2-s3-vectors
  • camel-aws2-ses
  • camel-aws2-sns
  • camel-aws2-sqs
  • camel-aws2-step-functions
  • camel-aws2-sts
  • camel-aws2-textract
  • camel-aws2-timestream
  • camel-aws2-transcribe
  • camel-aws2-translate
  • camel-azure-common
  • camel-azure-cosmosdb
  • camel-azure-eventgrid
  • camel-azure-eventhubs
  • camel-azure-files
  • camel-azure-functions
  • camel-azure-key-vault
  • camel-azure-parent
  • camel-azure-schema-registry
  • camel-azure-servicebus
  • camel-azure-storage-blob
  • camel-azure-storage-datalake
  • camel-azure-storage-queue
  • camel-barcode
  • camel-base
  • camel-base-engine
  • camel-base64
  • camel-bean
  • camel-bean-validator
  • camel-beanio
  • camel-bindy
  • camel-bom
  • camel-bonita
  • camel-box
  • camel-box-api
  • camel-box-parent
  • camel-braintree
  • camel-browse
  • camel-caffeine
  • camel-camunda
  • camel-cassandraql
  • camel-catalog
  • camel-catalog-common
  • camel-cbor
  • camel-chatscript
  • camel-chunk
  • camel-cli-connector
  • camel-cli-debug
  • camel-clickhouse
  • camel-clickup
  • camel-cloudevents
  • camel-cluster
  • camel-cm-sms
  • camel-coap
  • camel-cometd
  • camel-componentdsl
  • camel-console
  • camel-consul
  • camel-controlbus
  • camel-core
  • camel-core-all
  • camel-core-catalog
  • camel-core-engine
  • camel-core-languages
  • camel-core-model
  • camel-core-processor
  • camel-core-reifier
  • camel-core-xml
  • camel-couchbase
  • camel-couchdb
  • camel-cron
  • camel-crypto
  • camel-crypto-pgp
  • camel-csimple-joor
  • camel-csv
  • camel-cxf-common
  • camel-cxf-parent
  • camel-cxf-rest
  • camel-cxf-soap
  • camel-cxf-spring-common
  • camel-cxf-spring-rest
  • camel-cxf-spring-soap
  • camel-cxf-spring-transport
  • camel-cxf-transport
  • camel-cyberark-vault
  • camel-dapr
  • camel-dataformat
  • camel-dataset
  • camel-datasonnet
  • camel-dataweave
  • camel-debezium-common
  • camel-debezium-common-parent
  • camel-debezium-db2
  • camel-debezium-maven-plugin
  • camel-debezium-mongodb
  • camel-debezium-mysql
  • camel-debezium-oracle
  • camel-debezium-parent
  • camel-debezium-postgres
  • camel-debezium-sqlserver
  • camel-debug
  • camel-dependencies
  • camel-dfdl
  • camel-dhis2
  • camel-dhis2-api
  • camel-dhis2-parent
  • camel-diagram
  • camel-digitalocean
  • camel-direct
  • camel-disruptor
  • camel-djl
  • camel-dns
  • camel-docker
  • camel-docling
  • camel-drill
  • camel-dropbox
  • camel-dsl-modeline
  • camel-dsl-support
  • camel-duckdb
  • camel-dynamic-router
  • camel-ehcache
  • camel-eip-documentation-enricher-maven-plugin
  • camel-elasticsearch
  • camel-elasticsearch-rest-client
  • camel-endpointdsl
  • camel-event
  • camel-exec
  • camel-fastjson
  • camel-fhir
  • camel-fhir-api
  • camel-fhir-parent
  • camel-file
  • camel-file-watch
  • camel-flatpack
  • camel-flink
  • camel-flowable
  • camel-fop
  • camel-fory
  • camel-freemarker
  • camel-ftp
  • camel-ftp-common
  • camel-geocoder
  • camel-git
  • camel-github2
  • camel-google-bigquery
  • camel-google-calendar
  • camel-google-common
  • camel-google-drive
  • camel-google-firestore
  • camel-google-functions
  • camel-google-mail
  • camel-google-parent
  • camel-google-pubsub
  • camel-google-secret-manager
  • camel-google-sheets
  • camel-google-speech-to-text
  • camel-google-storage
  • camel-google-text-to-speech
  • camel-google-vertexai
  • camel-google-vision
  • camel-graphql
  • camel-grok
  • camel-groovy
  • camel-grpc
  • camel-gson
  • camel-hashicorp-vault
  • camel-hazelcast
  • camel-headersmap
  • camel-health
  • camel-hl7
  • camel-http
  • camel-http-base
  • camel-http-common
  • camel-huawei-parent
  • camel-huaweicloud-common
  • camel-huaweicloud-dms
  • camel-huaweicloud-frs
  • camel-huaweicloud-functiongraph
  • camel-huaweicloud-iam
  • camel-huaweicloud-imagerecognition
  • camel-huaweicloud-obs
  • camel-huaweicloud-smn
  • camel-huggingface
  • camel-ibm-cos
  • camel-ibm-parent
  • camel-ibm-secrets-manager
  • camel-ibm-watson-discovery
  • camel-ibm-watson-language
  • camel-ibm-watson-speech-to-text
  • camel-ibm-watson-text-to-speech
  • camel-ibm-watsonx-ai
  • camel-ibm-watsonx-data
  • camel-ical
  • camel-iec60870
  • camel-iggy
  • camel-ignite
  • camel-infinispan
  • camel-infinispan-common
  • camel-infinispan-embedded
  • camel-infinispan-parent
  • camel-influxdb
  • camel-influxdb2
  • camel-irc
  • camel-ironmq
  • camel-iso8583
  • camel-jackson
  • camel-jackson-avro
  • camel-jackson-protobuf
  • camel-jackson3
  • camel-jackson3-avro
  • camel-jackson3-protobuf
  • camel-jackson3xml
  • camel-jacksonxml
  • camel-jactl
  • camel-jandex
  • camel-jasypt
  • camel-java-io
  • camel-java-joor-dsl
  • camel-javascript
  • camel-jaxb
  • camel-jbang-console
  • camel-jbang-mcp
  • camel-jbang-plugin-mcp
  • camel-jbang-plugin-route-parser
  • camel-jbang-plugin-tui
  • camel-jbang-plugin-validate
  • camel-jcache
  • camel-jcr
  • camel-jdbc
  • camel-jetty
  • camel-jetty-common
  • camel-jfr
  • camel-jgroups
  • camel-jgroups-raft
  • camel-jira
  • camel-jms
  • camel-jmx
  • camel-jolt
  • camel-jooq
  • camel-joor
  • camel-jpa
  • camel-jq
  • camel-jsch
  • camel-jslt
  • camel-json-patch
  • camel-json-validator
  • camel-jsonapi
  • camel-jsonata
  • camel-jsonb
  • camel-jsonpath
  • camel-jsoup
  • camel-jt400
  • camel-jta
  • camel-jte
  • camel-kafka
  • camel-kamelet
  • camel-kamelet-main
  • camel-kamelet-main-support
  • camel-keycloak
  • camel-knative
  • camel-knative-api
  • camel-knative-http
  • camel-knative-parent
  • camel-kserve
  • camel-kubernetes
  • camel-kudu
  • camel-langchain4j-agent
  • camel-langchain4j-agent-api
  • camel-langchain4j-chat
  • camel-langchain4j-core
  • camel-langchain4j-embeddings
  • camel-langchain4j-embeddingstore
  • camel-langchain4j-embeddingstore-api
  • camel-langchain4j-tokenizer
  • camel-langchain4j-tools
  • camel-langchain4j-web-search
  • camel-language
  • camel-launcher-container
  • camel-ldap
  • camel-ldif
  • camel-leveldb
  • camel-log
  • camel-lra
  • camel-lucene
  • camel-lumberjack
  • camel-lzf
  • camel-mail
  • camel-mail-microsoft-oauth
  • camel-main
  • camel-management
  • camel-management-api
  • camel-mapstruct
  • camel-master
  • camel-maven-plugin
  • camel-mcp-server
  • camel-mcp-server-api
  • camel-mdc
  • camel-metrics
  • camel-micrometer
  • camel-micrometer-observability
  • camel-micrometer-prometheus
  • camel-microprofile-config
  • camel-microprofile-fault-tolerance
  • camel-microprofile-health
  • camel-microprofile-parent
  • camel-milo
  • camel-milvus
  • camel-mina
  • camel-mina-sftp
  • camel-minio
  • camel-mllp
  • camel-mock
  • camel-mongodb
  • camel-mongodb-gridfs
  • camel-mustache
  • camel-mvel
  • camel-mybatis
  • camel-nats
  • camel-neo4j
  • camel-netty
  • camel-netty-http
  • camel-oaipmh
  • camel-oauth
  • camel-observability-services
  • camel-observation
  • camel-ocsf
  • camel-ognl
  • camel-olingo2
  • camel-olingo2-api
  • camel-olingo2-parent
  • camel-olingo4
  • camel-olingo4-api
  • camel-olingo4-parent
  • camel-once
  • camel-openai
  • camel-openapi-java
  • camel-openapi-rest-dsl-generator
  • camel-openapi-validator
  • camel-opensearch
  • camel-openstack
  • camel-opentelemetry
  • camel-opentelemetry-metrics
  • camel-opentelemetry2
  • camel-optaplanner
  • camel-paho
  • camel-paho-mqtt5
  • camel-parquet-avro
  • camel-pdf
  • camel-pg-replication-slot
  • camel-pgevent
  • camel-pgvector
  • camel-pinecone
  • camel-platform-http
  • camel-platform-http-jolokia
  • camel-platform-http-main
  • camel-platform-http-vertx
  • camel-plc4x
  • camel-pqc
  • camel-printer
  • camel-protobuf
  • camel-pubnub
  • camel-pulsar
  • camel-python
  • camel-qdrant
  • camel-quartz
  • camel-quickfix
  • camel-reactive-executor-tomcat
  • camel-reactive-executor-vertx
  • camel-reactive-streams
  • camel-reactor
  • camel-redis
  • camel-ref
  • camel-resilience4j
  • camel-resilience4j-micrometer
  • camel-resourceresolver-github
  • camel-rest
  • camel-rest-openapi
  • camel-rest-postman
  • camel-restdsl-openapi-plugin
  • camel-robotframework
  • camel-rocketmq
  • camel-rss
  • camel-rxjava
  • camel-saga
  • camel-salesforce
  • camel-salesforce-codegen
  • camel-salesforce-maven-plugin
  • camel-salesforce-parent
  • camel-sap-netweaver
  • camel-saxon
  • camel-scheduler
  • camel-schematron
  • camel-seda
  • camel-servicenow
  • camel-servicenow-maven-plugin
  • camel-servicenow-parent
  • camel-servlet
  • camel-shell
  • camel-shiro
  • camel-sjms
  • camel-sjms2
  • camel-slack
  • camel-smb
  • camel-smooks
  • camel-smpp
  • camel-snakeyaml
  • camel-snmp
  • camel-soap
  • camel-solr
  • camel-splunk
  • camel-splunk-hec
  • camel-spring
  • camel-spring-ai-chat
  • camel-spring-ai-embeddings
  • camel-spring-ai-image
  • camel-spring-ai-parent
  • camel-spring-ai-vector-store
  • camel-spring-batch
  • camel-spring-cloud-config
  • camel-spring-jdbc
  • camel-spring-ldap
  • camel-spring-main
  • camel-spring-parent
  • camel-spring-rabbitmq
  • camel-spring-redis
  • camel-spring-security
  • camel-spring-ws
  • camel-spring-xml
  • camel-sql
  • camel-ssh
  • camel-stax
  • camel-stitch
  • camel-stream
  • camel-streamcaching-test
  • camel-stringtemplate
  • camel-stripe
  • camel-stub
  • camel-support
  • camel-swift
  • camel-syslog
  • camel-tahu
  • camel-tarfile
  • camel-telegram
  • camel-telemetry
  • camel-telemetry-dev
  • camel-tensorflow-serving
  • camel-test-infra-all
  • camel-test-infra-artemis
  • camel-test-infra-cli
  • camel-test-infra-core
  • camel-test-infra-jetty
  • camel-test-infra-qdrant
  • camel-test-infra-smb
  • camel-test-junit5
  • camel-test-junit6
  • camel-test-main-junit5
  • camel-test-main-junit6
  • camel-test-parent
  • camel-test-spring-junit5
  • camel-test-spring-junit6
  • camel-threadpoolfactory-vertx
  • camel-thrift
  • camel-thymeleaf
  • camel-tika
  • camel-timer
  • camel-tooling-maven
  • camel-tracing
  • camel-twilio
  • camel-twitter
  • camel-undertow
  • camel-undertow-spring-security
  • camel-univocity-parsers
  • camel-util
  • camel-validator
  • camel-velocity
  • camel-vertx
  • camel-vertx-common
  • camel-vertx-http
  • camel-vertx-parent
  • camel-vertx-websocket
  • camel-wal
  • camel-wasm
  • camel-weather
  • camel-weaviate
  • camel-web3j
  • camel-webhook
  • camel-whatsapp
  • camel-wordpress
  • camel-workday
  • camel-xchange
  • camel-xj
  • camel-xml-io
  • camel-xml-io-dsl
  • camel-xml-jaxb
  • camel-xml-jaxb-dsl
  • camel-xml-jaxb-dsl-test-definition
  • camel-xml-jaxb-dsl-test-spring
  • camel-xml-jaxp
  • camel-xmlsecurity
  • camel-xmpp
  • camel-xpath
  • camel-xslt
  • camel-xslt-saxon
  • camel-yaml-dsl-common
  • camel-yaml-dsl-validator
  • camel-yaml-dsl-validator-maven-plugin
  • camel-yaml-io
  • camel-zeebe
  • camel-zendesk
  • camel-zip-deflater
  • camel-zipfile
  • camel-zookeeper
  • camel-zookeeper-master
  • components
  • docs
  • sync-properties-maven-plugin
Modules with tests skipped (23)
  • apache-camel
  • camel-catalog-console
  • camel-catalog-lucene
  • camel-catalog-maven
  • camel-catalog-suggest
  • camel-csimple-maven-plugin
  • camel-endpointdsl-support
  • camel-itest
  • camel-jbang-core
  • camel-jbang-it
  • camel-jbang-main
  • camel-jbang-plugin-edit
  • camel-jbang-plugin-generate
  • camel-jbang-plugin-kubernetes
  • camel-jbang-plugin-test
  • camel-launcher
  • camel-report-maven-plugin
  • camel-route-parser
  • camel-yaml-dsl
  • camel-yaml-dsl-deserializers
  • camel-yaml-dsl-maven-plugin
  • coverage
  • dummy-component

ℹ️ Shadow mode — Scalpel observes but does not affect test execution. Learn more

⚠️ Some tests are disabled on GitHub Actions (@DisabledIfSystemProperty(named = "ci.env.name")) and require manual verification:

  • components: 103 test(s) disabled on GitHub Actions
Build reactor — dependencies compiled but only changed modules were tested (595 modules)
  • Camel :: AI :: A2A
  • Camel :: AI :: ChatScript
  • Camel :: AI :: Deep Java Library
  • Camel :: AI :: Docling
  • Camel :: AI :: Hugging Face
  • Camel :: AI :: KServe
  • Camel :: AI :: LangChain4j :: Agent
  • Camel :: AI :: LangChain4j :: Agent :: API
  • Camel :: AI :: LangChain4j :: Chat
  • Camel :: AI :: LangChain4j :: Core
  • Camel :: AI :: LangChain4j :: Embedding
  • Camel :: AI :: LangChain4j :: Embedding Store :: API
  • Camel :: AI :: LangChain4j :: EmbeddingStore
  • Camel :: AI :: LangChain4j :: Tokenizer
  • Camel :: AI :: LangChain4j :: Tools (deprecated)
  • Camel :: AI :: LangChain4j :: Web Search
  • Camel :: AI :: MCP Server
  • Camel :: AI :: MCP Server API
  • Camel :: AI :: Milvus
  • Camel :: AI :: Neo4j
  • Camel :: AI :: OpenAI
  • Camel :: AI :: PGVector
  • Camel :: AI :: Parent
  • Camel :: AI :: Pinecone
  • Camel :: AI :: Qdrant
  • Camel :: AI :: TensorFlow Serving
  • Camel :: AI :: Tool
  • Camel :: AI :: Weaviate
  • Camel :: AMQP
  • Camel :: API
  • Camel :: AS2 :: API
  • Camel :: AS2 :: Component
  • Camel :: AS2 :: Parent
  • Camel :: ASN.1
  • Camel :: AWS :: Common
  • Camel :: AWS :: Parent
  • Camel :: AWS CloudTrail
  • Camel :: AWS Config
  • Camel :: AWS Redshift Data
  • Camel :: AWS Rekognition
  • Camel :: AWS Security Hub
  • Camel :: AWS Step Functions
  • Camel :: AWS Timestream
  • Camel :: AWS2 :: Transcribe
  • Camel :: AWS2 Athena
  • Camel :: AWS2 Bedrock
  • Camel :: AWS2 CW
  • Camel :: AWS2 Comprehend
  • Camel :: AWS2 DDB
  • Camel :: AWS2 EC2
  • Camel :: AWS2 ECS
  • Camel :: AWS2 EKS
  • Camel :: AWS2 Eventbridge
  • Camel :: AWS2 IAM
  • Camel :: AWS2 KMS
  • Camel :: AWS2 Kinesis
  • Camel :: AWS2 Lambda
  • Camel :: AWS2 MQ
  • Camel :: AWS2 MSK
  • Camel :: AWS2 Parameter Store
  • Camel :: AWS2 Polly
  • Camel :: AWS2 S3
  • Camel :: AWS2 S3 Vectors
  • Camel :: AWS2 SES
  • Camel :: AWS2 SNS
  • Camel :: AWS2 SQS
  • Camel :: AWS2 STS
  • Camel :: AWS2 Secrets Manager
  • Camel :: AWS2 Textract
  • Camel :: AWS2 Translate
  • Camel :: ActiveMQ 5.x
  • Camel :: ActiveMQ 6.x
  • Camel :: All Components Sync point
  • Camel :: All Core Sync point
  • Camel :: ArangoDB
  • Camel :: Archetypes
  • Camel :: Archetypes :: API Component
  • Camel :: Archetypes :: Component
  • Camel :: Archetypes :: Data Format
  • Camel :: Archetypes :: Java Router
  • Camel :: Archetypes :: Main
  • Camel :: Archetypes :: Spring XML Based Router (deprecated)
  • Camel :: Assembly
  • Camel :: Asterisk
  • Camel :: Atmosphere WebSocket Servlet
  • Camel :: Atom
  • Camel :: Attachments
  • Camel :: Avro
  • Camel :: Avro RPC
  • Camel :: Avro RPC :: Jetty
  • Camel :: Avro RPC :: Parent
  • Camel :: Avro RPC :: Spi
  • Camel :: Azure :: Common
  • Camel :: Azure :: CosmosDB
  • Camel :: Azure :: Event Grid
  • Camel :: Azure :: Event Hubs
  • Camel :: Azure :: Files
  • Camel :: Azure :: Functions
  • Camel :: Azure :: Key Vault
  • Camel :: Azure :: Parent
  • Camel :: Azure :: Schema Registry
  • Camel :: Azure :: ServiceBus
  • Camel :: Azure :: Storage Blob
  • Camel :: Azure :: Storage Datalake
  • Camel :: Azure :: Storage Queue
  • Camel :: BOM
  • Camel :: Barcode
  • Camel :: Base
  • Camel :: Base Engine
  • Camel :: Base64
  • Camel :: Bean
  • Camel :: Bean validator
  • Camel :: BeanIO
  • Camel :: Bindy
  • Camel :: Bonita
  • Camel :: Box :: API
  • Camel :: Box :: Component
  • Camel :: Box :: Parent
  • Camel :: Braintree
  • Camel :: Browse
  • Camel :: CBOR
  • Camel :: CM SMS
  • Camel :: CSV
  • Camel :: CXF :: Common
  • Camel :: CXF :: Common :: Spring
  • Camel :: CXF :: Parent
  • Camel :: CXF :: REST
  • Camel :: CXF :: REST :: Spring
  • Camel :: CXF :: SOAP
  • Camel :: CXF :: SOAP :: Spring
  • Camel :: CXF :: Transport
  • Camel :: CXF :: Transport :: Spring
  • Camel :: Caffeine
  • Camel :: Camunda
  • Camel :: Cassandra CQL
  • Camel :: Catalog :: CSimple Maven Plugin (deprecated)
  • Camel :: Catalog :: Camel Catalog
  • Camel :: Catalog :: Camel Report Maven Plugin
  • Camel :: Catalog :: Camel Route Parser
  • Camel :: Catalog :: Common
  • Camel :: Catalog :: Console
  • Camel :: Catalog :: Dummy Component
  • Camel :: Catalog :: Lucene (deprecated)
  • Camel :: Catalog :: Maven
  • Camel :: Catalog :: Suggest
  • Camel :: Chunk
  • Camel :: ClickHouse
  • Camel :: ClickUp
  • Camel :: CloudEvents
  • Camel :: Cluster
  • Camel :: CoAP
  • Camel :: Cometd
  • Camel :: Common Telemetry
  • Camel :: Common Tracing (deprecated)
  • Camel :: Component DSL
  • Camel :: Components
  • Camel :: Console
  • Camel :: Consul
  • Camel :: Controlbus
  • Camel :: Core
  • Camel :: Core Catalog
  • Camel :: Core Engine
  • Camel :: Core Languages
  • Camel :: Core Model
  • Camel :: Core Processor
  • Camel :: Core Reifier
  • Camel :: Core XML
  • Camel :: CouchDB
  • Camel :: Couchbase
  • Camel :: Coverage
  • Camel :: Cron
  • Camel :: Crypto
  • Camel :: Crypto PGP
  • Camel :: CyberArk Vault
  • Camel :: DFDL
  • Camel :: DHIS2
  • Camel :: DHIS2 :: Parent
  • Camel :: DHIS2 API
  • Camel :: DNS
  • Camel :: DSL :: CLI Connector
  • Camel :: DSL :: CLI Debug
  • Camel :: DSL :: Modeline
  • Camel :: DSL :: Support
  • Camel :: Dapr
  • Camel :: DataSet
  • Camel :: DataSonnet
  • Camel :: DataWeave
  • Camel :: Dataformat
  • Camel :: Debezium :: Common
  • Camel :: Debezium :: Common :: Parent
  • Camel :: Debezium :: DB2
  • Camel :: Debezium :: Maven Plugin
  • Camel :: Debezium :: MongoDB
  • Camel :: Debezium :: MySQL
  • Camel :: Debezium :: Oracle
  • Camel :: Debezium :: Parent
  • Camel :: Debezium :: PostgreSQL
  • Camel :: Debezium :: SQL Server
  • Camel :: Debugging
  • Camel :: Dependencies
  • Camel :: Diagram
  • Camel :: DigitalOcean (deprecated)
  • Camel :: Direct
  • Camel :: Disruptor
  • Camel :: Docker
  • Camel :: Docs
  • Camel :: Drill
  • Camel :: Dropbox
  • Camel :: DuckDB
  • Camel :: Dynamic Router
  • Camel :: Ehcache
  • Camel :: ElasticSearch Rest Client
  • Camel :: Elasticsearch Java API Client
  • Camel :: Endpoint DSL
  • Camel :: Endpoint DSL :: Support
  • Camel :: Event
  • Camel :: Exec
  • Camel :: FHIR
  • Camel :: FHIR :: API
  • Camel :: FHIR :: Parent
  • Camel :: FOP
  • Camel :: FTP
  • Camel :: FTP Common
  • Camel :: Fastjson
  • Camel :: File
  • Camel :: File Watch
  • Camel :: FlatPack
  • Camel :: Flink
  • Camel :: Flowable
  • Camel :: Fory
  • Camel :: Freemarker
  • Camel :: Geocoder
  • Camel :: Git
  • Camel :: GitHub2
  • Camel :: Google :: BigQuery
  • Camel :: Google :: Calendar
  • Camel :: Google :: Common
  • Camel :: Google :: Drive
  • Camel :: Google :: Firestore
  • Camel :: Google :: Functions
  • Camel :: Google :: Mail
  • Camel :: Google :: Parent
  • Camel :: Google :: PubSub
  • Camel :: Google :: Secret Manager
  • Camel :: Google :: Sheets
  • Camel :: Google :: Speech To Text
  • Camel :: Google :: Storage
  • Camel :: Google :: Text To Speech
  • Camel :: Google :: Vertex AI
  • Camel :: Google :: Vision
  • Camel :: GraphQL
  • Camel :: Grok
  • Camel :: Groovy
  • Camel :: Gson
  • Camel :: HL7
  • Camel :: HTTP
  • Camel :: HTTP :: Base
  • Camel :: HTTP :: Common
  • Camel :: HashiCorp :: Key Vault
  • Camel :: HazelCast
  • Camel :: Headers Map (deprecated)
  • Camel :: Health
  • Camel :: Huawei Cloud :: Common
  • Camel :: Huawei Cloud :: DMS
  • Camel :: Huawei Cloud :: FaceRecognition
  • Camel :: Huawei Cloud :: FunctionGraph
  • Camel :: Huawei Cloud :: IAM
  • Camel :: Huawei Cloud :: ImageRecognition
  • Camel :: Huawei Cloud :: OBS
  • Camel :: Huawei Cloud :: Parent
  • Camel :: Huawei Cloud :: SimpleNotification
  • Camel :: IBM :: Cloud Object Storage
  • Camel :: IBM :: Parent
  • Camel :: IBM :: Secrets Manager
  • Camel :: IBM :: Watson Discovery
  • Camel :: IBM :: Watson Language
  • Camel :: IBM :: Watson Speech to Text
  • Camel :: IBM :: Watson Text to Speech
  • Camel :: IBM :: watsonx.ai
  • Camel :: IBM :: watsonx.data
  • Camel :: IEC 60870 (deprecated)
  • Camel :: IRC (deprecated)
  • Camel :: ISO-8583
  • Camel :: Iggy
  • Camel :: Ignite
  • Camel :: Infinispan :: Common
  • Camel :: Infinispan :: Embedded
  • Camel :: Infinispan :: Parent
  • Camel :: Infinispan :: Remote
  • Camel :: InfluxDB
  • Camel :: InfluxDB2
  • Camel :: Integration Tests
  • Camel :: Integration Tests :: Stream Caching Tests
  • Camel :: IronMQ
  • Camel :: JAXB
  • Camel :: JBang :: Console
  • Camel :: JBang :: Core
  • Camel :: JBang :: Integration tests
  • Camel :: JBang :: MCP
  • Camel :: JBang :: Main
  • Camel :: JBang :: Plugin :: Edit
  • Camel :: JBang :: Plugin :: Generate
  • Camel :: JBang :: Plugin :: Kubernetes
  • Camel :: JBang :: Plugin :: MCP
  • Camel :: JBang :: Plugin :: Route Parser
  • Camel :: JBang :: Plugin :: TUI
  • Camel :: JBang :: Plugin :: Testing
  • Camel :: JBang :: Plugin :: Validate
  • Camel :: JCR
  • Camel :: JCache
  • Camel :: JDBC
  • Camel :: JGroups
  • Camel :: JGroups Raft
  • Camel :: JIRA
  • Camel :: JMS
  • Camel :: JMX
  • Camel :: JOOQ
  • Camel :: JPA
  • Camel :: JQ
  • Camel :: JSON validator
  • Camel :: JSON-B
  • Camel :: JSONATA
  • Camel :: JSon Path
  • Camel :: JSonApi
  • Camel :: JSoup
  • Camel :: JTA
  • Camel :: Jackson
  • Camel :: Jackson 3
  • Camel :: Jackson 3 Avro
  • Camel :: Jackson 3 Protobuf
  • Camel :: Jackson 3 XML
  • Camel :: Jackson Avro
  • Camel :: Jackson Protobuf
  • Camel :: Jackson XML
  • Camel :: Jactl
  • Camel :: Jandex
  • Camel :: Jasypt
  • Camel :: Java DSL IO
  • Camel :: Java DSL with jOOR
  • Camel :: Java Flight Recorder
  • Camel :: Java Template Engine
  • Camel :: Java Toolbox for IBM i
  • Camel :: JavaScript
  • Camel :: Jetty
  • Camel :: Jetty :: Common
  • Camel :: Jolt
  • Camel :: Jsch
  • Camel :: Jslt
  • Camel :: JsonPatch (deprecated)
  • Camel :: Kafka
  • Camel :: Kamelet
  • Camel :: Kamelet Main
  • Camel :: Kamelet Main :: Support
  • Camel :: Keycloak
  • Camel :: Knative :: Parent
  • Camel :: Knative API
  • Camel :: Knative Component
  • Camel :: Knative HTTP
  • Camel :: Kubernetes
  • Camel :: Kudu
  • Camel :: LDAP
  • Camel :: LDIF
  • Camel :: LZF
  • Camel :: Language
  • Camel :: Launcher
  • Camel :: Launcher :: Container
  • Camel :: LevelDB (deprecated)
  • Camel :: Log
  • Camel :: Long-Running-Action
  • Camel :: Lucene
  • Camel :: Lumberjack
  • Camel :: MDC
  • Camel :: MINA
  • Camel :: MINA SFTP
  • Camel :: MLLP
  • Camel :: MVEL
  • Camel :: Mail
  • Camel :: Mail :: Microsoft OAuth
  • Camel :: Main
  • Camel :: Management
  • Camel :: Management API
  • Camel :: MapStruct
  • Camel :: Master
  • Camel :: Maven Plugins :: Camel API Component Plugin
  • Camel :: Maven Plugins :: Camel Maven Plugin
  • Camel :: Maven Plugins :: OpenApi REST DSL Generator
  • Camel :: Maven Plugins :: Sync Properties
  • Camel :: Maven Plugins :: XML DSL Doc Enricher
  • Camel :: Metrics
  • Camel :: MicroProfile :: Config
  • Camel :: MicroProfile :: Fault Tolerance
  • Camel :: MicroProfile :: Health
  • Camel :: MicroProfile :: Parent
  • Camel :: Micrometer
  • Camel :: Micrometer :: Observability 2
  • Camel :: Micrometer :: Observation (deprecated)
  • Camel :: Micrometer :: Prometheus
  • Camel :: Milo
  • Camel :: MinIO
  • Camel :: Mock
  • Camel :: MongoDB
  • Camel :: MongoDB GridFS
  • Camel :: Mustache
  • Camel :: MyBatis
  • Camel :: Nats
  • Camel :: Netty
  • Camel :: Netty HTTP
  • Camel :: OAIPMH
  • Camel :: OAuth
  • Camel :: OCSF
  • Camel :: OGNL (deprecated)
  • Camel :: Observability Services
  • Camel :: Olingo2 (Deprecated) :: API
  • Camel :: Olingo2 (Deprecated) :: Component
  • Camel :: Olingo2 (Deprecated) :: Parent
  • Camel :: Olingo4 (Deprecated) :: API
  • Camel :: Olingo4 (Deprecated) :: Component
  • Camel :: Olingo4 (Deprecated) :: Parent
  • Camel :: Once
  • Camel :: OpenAPI :: Validator
  • Camel :: OpenApi Java
  • Camel :: OpenSearch Java API Client
  • Camel :: OpenStack
  • Camel :: OpenTelemetry (deprecated)
  • Camel :: Opentelemetry 2
  • Camel :: Opentelemetry Metrics
  • Camel :: OptaPlanner
  • Camel :: PDF
  • Camel :: PLC4X
  • Camel :: PQC
  • Camel :: Paho (deprecated)
  • Camel :: Paho MQTT 5
  • Camel :: Parent
  • Camel :: Parquet Avro
  • Camel :: PgEvent
  • Camel :: PgReplicationSlot
  • Camel :: Platform HTTP
  • Camel :: Platform HTTP :: Jolokia
  • Camel :: Platform HTTP :: Main
  • Camel :: Platform HTTP :: Vert.x
  • Camel :: Printer
  • Camel :: Protobuf
  • Camel :: PubNub
  • Camel :: Pulsar
  • Camel :: Python
  • Camel :: Quartz
  • Camel :: QuickFIX/J
  • Camel :: REST
  • Camel :: REST OpenApi
  • Camel :: REST Postman
  • Camel :: RSS
  • Camel :: Reactive Executor :: Tomcat (deprecated)
  • Camel :: Reactive Executor :: Vert.x (deprecated)
  • Camel :: Reactive Streams
  • Camel :: Reactor
  • Camel :: Redis
  • Camel :: Ref
  • Camel :: Resilience4j
  • Camel :: Resilience4j :: Micrometer
  • Camel :: ResourceResolver GitHub
  • Camel :: RobotFramework
  • Camel :: RocketMQ
  • Camel :: RxJava
  • Camel :: SAP NetWeaver
  • Camel :: SMB
  • Camel :: SMPP
  • Camel :: SNMP
  • Camel :: SOAP
  • Camel :: SQL
  • Camel :: SSH
  • Camel :: SWIFT
  • Camel :: Saga
  • Camel :: Salesforce
  • Camel :: Salesforce :: CodeGen
  • Camel :: Salesforce :: Maven Plugin
  • Camel :: Salesforce :: Parent
  • Camel :: Saxon
  • Camel :: Scheduler
  • Camel :: Schematron
  • Camel :: Seda
  • Camel :: ServiceNow :: Component
  • Camel :: ServiceNow :: Maven Plugin
  • Camel :: ServiceNow :: Parent
  • Camel :: Servlet
  • Camel :: Shell
  • Camel :: Shiro
  • Camel :: Simple JMS
  • Camel :: Simple JMS2
  • Camel :: Slack
  • Camel :: Smooks :: Parent
  • Camel :: SnakeYAML
  • Camel :: Solr
  • Camel :: Splunk (deprecated)
  • Camel :: Splunk HEC
  • Camel :: Spring
  • Camel :: Spring :: Parent
  • Camel :: Spring AI :: Chat
  • Camel :: Spring AI :: Embeddings
  • Camel :: Spring AI :: Image
  • Camel :: Spring AI :: Parent
  • Camel :: Spring AI :: Vector Store
  • Camel :: Spring Batch
  • Camel :: Spring Cloud Config
  • Camel :: Spring JDBC
  • Camel :: Spring LDAP
  • Camel :: Spring Main
  • Camel :: Spring RabbitMQ
  • Camel :: Spring Redis
  • Camel :: Spring Security
  • Camel :: Spring Web Services
  • Camel :: Spring XML
  • Camel :: StAX
  • Camel :: Stitch
  • Camel :: Stream
  • Camel :: StringTemplate
  • Camel :: Stripe
  • Camel :: Stub
  • Camel :: Support
  • Camel :: Syslog
  • Camel :: Tahu
  • Camel :: Tar File
  • Camel :: Telegram
  • Camel :: Telemetry :: Dev
  • Camel :: Test :: JUnit5
  • Camel :: Test :: JUnit6
  • Camel :: Test :: Main :: JUnit5
  • Camel :: Test :: Main :: JUnit6
  • Camel :: Test :: Parent
  • Camel :: Test :: Spring :: JUnit5
  • Camel :: Test Infra :: All test services
  • Camel :: Test Infra :: Artemis
  • Camel :: Test Infra :: Cli (Camel CLI)
  • Camel :: Test Infra :: Core
  • Camel :: Test Infra :: Jetty
  • Camel :: Test Infra :: Server Message Block
  • Camel :: Test Infra :: qdrant
  • Camel :: Thread Pool Factory :: Vert.x (deprecated)
  • Camel :: Thrift
  • Camel :: Thymeleaf
  • Camel :: Tika
  • Camel :: Timer
  • Camel :: Tooling :: Maven
  • Camel :: Tooling :: OpenApi REST DSL Generator
  • Camel :: Twilio
  • Camel :: Twitter
  • Camel :: Undertow
  • Camel :: Undertow Spring Security
  • Camel :: UniVocity Parsers
  • Camel :: Util
  • Camel :: Validator
  • Camel :: Velocity
  • Camel :: Vert.x :: Common
  • Camel :: Vert.x :: HTTP
  • Camel :: Vert.x :: Parent
  • Camel :: Vert.x :: WebSocket
  • Camel :: Vertx
  • Camel :: WAL
  • Camel :: Wasm
  • Camel :: Weather
  • Camel :: Web3j
  • Camel :: Webhook
  • Camel :: Whatsapp
  • Camel :: Wordpress
  • Camel :: Workday
  • Camel :: XChange
  • Camel :: XJ
  • Camel :: XML DSL Jaxb :: Test :: Definition
  • Camel :: XML DSL Jaxb :: Test :: Spring
  • Camel :: XML DSL with camel-xml-io
  • Camel :: XML DSL with camel-xml-jaxb
  • Camel :: XML IO
  • Camel :: XML JAXB
  • Camel :: XML JAXP
  • Camel :: XML Security
  • Camel :: XMPP
  • Camel :: XPath
  • Camel :: XSLT
  • Camel :: XSLT Saxon
  • Camel :: YAML DSL
  • Camel :: YAML DSL :: Common
  • Camel :: YAML DSL :: Deserializers
  • Camel :: YAML DSL :: Maven Plugins
  • Camel :: YAML DSL :: Validator
  • Camel :: YAML DSL :: Validator Maven Plugin
  • Camel :: YAML IO
  • Camel :: Zeebe (deprecated)
  • Camel :: Zendesk
  • Camel :: Zip Deflater
  • Camel :: Zip File
  • Camel :: Zookeeper
  • Camel :: Zookeeper Master
  • Camel :: csimple jOOR (deprecated)
  • Camel :: gRPC
  • Camel :: iCal
  • Camel :: jOOR

⚙️ View full build and test results

@atiaomar1978-hub

Copy link
Copy Markdown
Contributor

Code review — PR #25390 (CAMEL-24367: camel-rest-postman)

Review generated with AI assistance (Grok-style deep analysis + Bugbot pass) on behalf of @atiaomar1978-hub. Verified against branch feat/camel-rest-postman-component at commit d4c5f8e.


Summary

This PR adds a well-architected camel-rest-postman component — the Postman Collection counterpart to camel-rest-openapi. It supports producer invocation, folder/collection runner mode, and contract-first REST consumers via platform-http. The design is thoughtful, documentation is strong, and the security posture around Postman API credentials is notably thorough.

Recommendation: Approve after one rebase fix (upgrade guide drift — see Major #1 below). All blocking items from @davsclaus appear addressed.


Strengths

  1. Clean separation of concerns — mirrors rest-openapi without performing HTTP itself; delegates to RestProducerFactory / RestOpenApiConsumerFactory (acceptable reuse per maintainer confirmation).

  2. Security done deliberately

    • PostmanCloudClient: redirect rejection (NEVER), HTTPS enforcement (HTTP only on loopback), bounded reads (8 MiB), strict uid path encoding
    • Two-credential model: postmanApiKey (Postman cloud only) vs collectionAuth (target API, default ignore)
    • PostmanRedactor: unconditional stripping of auth blocks and secret variables before serving apiContextPath
    • Postman pre-request/test scripts never executed
    • postmanApiKey marked secret = true in @UriParam and registered in SensitiveUtils
  3. Test quality matches project conventions

    • 13 test classes, 114 @Test methods (PR cites 167 including platform-http consumer tests)
    • AssertJ throughout, package-private test classes/methods, no Thread.sleep
    • Strong coverage: cloud client edge cases, redaction, variable resolver, URI parsing, credential separation e2e
  4. Zero new runtime dependencies — parses Collection v2.1 with existing camel-util-json.

  5. Maintainer feedback addressed

    • JIRA CAMEL-24367 linked in title/commits
    • Upgrade guide new-component section removed (at time of fix)
    • consumerComponentName description generalized
    • RuntimeCamelException.wrapRuntimeCamelException(e) in RestPostmanProcessor
    • AsciiDoc passthrough fix for {{petId}}-style placeholders (6607c56)
    • Derived catalog/DSL files regenerated (d4c5f8e)
  6. CI green — Build and test (Java 17 + 25), doc validation, dependency review all passing on latest push.


Issues

Major

1. Upgrade guide drift from current main (rebase needed)

Comparing this branch to current main, camel-4x-upgrade-guide-4_22.adoc is not aligned — the PR branch is missing several sections that landed on main after the author's rebase (e.g. camel-mcp-server session eviction, camel-support deserialization filter notes). Merging as-is would drop unrelated upgrade-guide content.

Please rebase onto latest main and confirm the upgrade guide diff is empty (or only contains intentional migration notes — there should be none for a new component).

2. Allow header gap on wrong-method requests (known, acceptable for now)

The PR description correctly notes that for paths the collection does describe, a wrong HTTP method gets 405 from the vert.x router before RestPostmanProcessor runs, with an empty Allow header — unlike rest-openapi. The processor's own 404/405 handling (with populated Allow) still applies for unregistered paths. Not a merge blocker, but worth a follow-up JIRA against platform-http if desired.

Minor / documentation

3. Camel property expansion from collection content

PostmanVariableResolver.lookup() falls back to camelContext.resolvePropertyPlaceholders("{{" + name + "}}") for unresolved Postman variables. This is useful for operators overriding {{baseUrl}}, but it means a collection loaded from an untrusted http: source could reference Camel property names. Per Camel's security model, route authors are trusted — but worth a one-line doc warning in rest-postman-component.adoc under the variables section: loading collections from untrusted sources combined with property placeholder resolution can expose configured property values.

4. Branch naming

Understandable why renaming was avoided (fork PR closure). Optional: open a follow-up PR from feature/CAMEL-24367-rest-postman once this merges, or leave as-is since JIRA is in commits/title.


Bugbot pass

Automated Bugbot was run against the workspace; it reported findings on unrelated camel-ai / MCP changes (wrong branch context), not on this PR's diff. Manual review above covers camel-rest-postman specifically.


Testing verified locally

./mvnw -pl components/camel-rest-postman -Dtest='!*IT' test

BUILD SUCCESS (all unit tests in camel-rest-postman).


Verdict

Area Status
Design & architecture ✅ Excellent
Security ✅ Strong (document property-expansion edge case)
Tests ✅ Thorough
Docs ✅ Good (AsciiDoc fix applied)
Conventions ✅ Matches AGENTS.md
Maintainer blockers ✅ Addressed
Rebase hygiene ⚠️ Rebase needed for upgrade guide

Request changes → re-request review after rebase onto latest main. Happy to re-review once the upgrade guide diff is clean.


/cc @christosgkoros @davsclaus

@atiaomar1978-hub atiaomar1978-hub left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Request changes

Please address the following before merge:

Required

1. Rebase onto latest main — upgrade guide drift

The branch is behind current main. Comparing camel-4x-upgrade-guide-4_22.adoc shows this PR would drop unrelated upgrade-guide sections already on main (e.g. camel-mcp-server session eviction, camel-support deserialization filter notes).

Please rebase onto latest main and confirm the upgrade guide file has zero diff against main (new components belong only in the component's own .adoc page, not the upgrade guide).


Everything else from the prior review looks good: security design, test coverage, maintainer feedback (JIRA, exception wrapping, docs, derived file regen), and CI are all in solid shape.

Once rebased, please re-request review.

AI-generated review on behalf of @atiaomar1978-hub

christosgkoros and others added 4 commits August 8, 2026 08:36
Configures REST producers and contract-first REST consumers from a Postman
Collection, as the Postman counterpart of camel-rest-openapi. Like it, this
component performs no HTTP itself and delegates to a component implementing
RestProducerFactory.

The collection is loaded either from a Collection v2.1 JSON document
(classpath:, file: or http:) or, by its uid, from the Postman cloud.

Producer:
- a fragment naming a request invokes it, sending the exchange body and headers
- a fragment naming a folder, or no fragment at all, runs every request in turn
  like Postman's collection runner and returns a List<PostmanRunResult>

Consumer:
- serves the collection's requests, dispatching each to direct:<requestId>
- missingRequest=fail|ignore|mock, where mock replays the collection's own saved
  example responses before falling back to mockIncludePattern
- apiContextPath serves the collection with every auth block and every secret
  variable removed

Requests are addressed by their slugified name, folder-qualified when a name is
not unique, and by item.id when the collection records one. item.id is optional
in the v2.1 schema and Postman's exporter strips it, so exported collections are
normally addressed by slug.

Two separate credentials are kept apart by their option names: postmanApiKey
authenticates against Postman in order to download a collection and is never
sent to the API the collection describes, while the collection's own auth block
is governed by collectionAuth, which defaults to ignore. Redirects from
postmanApiUrl are rejected rather than followed, since following one would send
the key to the redirect target.

No new third-party dependency is introduced: the collection is parsed with
camel-util-json.

Co-Authored-By: Claude <noreply@anthropic.com>
The documentation build treats asciidoctor warnings as failures, and the four
brace spans in rest-postman-component.adoc were being parsed as AsciiDoc
attribute references rather than literal text, producing "skipping reference to
missing attribute" for petid, baseurl, variable and placeholders.

Wrap them in an inline passthrough so no substitution is applied. The doubled
Postman braces make this preferable to backslash escaping.

Co-Authored-By: Claude <noreply@anthropic.com>
The consumerComponentName description reword and the AsciiDoc passthrough fix
were not propagated to the files derived from them, which left the tree dirty
after a build:

- catalog copy of rest-postman-component.adoc
- component and endpoint DSL builder factories

Also reverts an unintended re-indentation of the SENSITIVE-PATTERN marker in
SensitiveUtils, which the formatter had applied but the generator does not
produce, so that file now differs from main only by the two postmanapikey
entries.

Co-Authored-By: Claude <noreply@anthropic.com>
Do not resolve Camel property placeholder functions from collection content.
PostmanVariableResolver fell back to resolvePropertyPlaceholders for any name
it did not know, so a collection containing {{env:AWS_SECRET_ACCESS_KEY}} or
{{sys:user.home}} would have that value expanded into an outgoing request. A
cloud-hosted collection is editable by anyone with access to the Postman
workspace, so names using the prefix:value syntax of a placeholder function
are now refused. Plain names still resolve, so an operator can override any
variable through properties.

Build the HttpClient once in PostmanCloudClient rather than per fetch. Each
client allocates its own selector and executor threads, which were leaked
across repeated cache misses.

Release the unit of work of the sub-exchanges created by the collection
runner. Nothing in the endpoint-to-producer path starts one today, so this is
defensive, but it keeps cleanup deterministic rather than depending on that
invariant holding.

Co-Authored-By: Claude <noreply@anthropic.com>
@christosgkoros
christosgkoros force-pushed the feat/camel-rest-postman-component branch from d4c5f8e to 70a80ea Compare August 8, 2026 05:53
@christosgkoros

Copy link
Copy Markdown
Contributor Author

@davsclaus thanks — all three addressed in 70a80ea.

1. Variable resolver expanding Camel property functions (Medium) — good catch, and I took option (b) rather than only documenting it, since documentation would not stop it.

PostmanVariableResolver now refuses to hand any name containing : to resolvePropertyPlaceholders. Camel's placeholder functions are uniformly prefix:argument, so this blocks env:, sys:, bean: and the vault functions in one rule, while plain names still resolve — an operator can still override any collection variable through properties, which was the point of the fallback.

Three tests were added: that +{{env:PATH}}+, +{{sys:user.home}}+ and +{{bean:foo}}+ are left literal, that a plain name still resolves from properties, and that the collection scope still wins over properties. The behaviour is documented in the Variables section of the component page.

2. Per-call HttpClient (Low) — fixed; it is now built once in the constructor. Redirect rejection and the SSL context moved onto the shared client, so the security behaviour is unchanged.

3. Sub-exchange lifecycle — not intentional so much as unexamined, so thank you for asking. Nothing in the endpoint.createExchange()producer.process() path starts a unit of work, so getUnitOfWork() is null today and there is nothing to release. Rather than rely on that invariant continuing to hold, the runner now releases one when present via UnitOfWorkHelper.doneUow, following the pattern in ResilienceProcessor.

Verified after the change: 170 tests in camel-rest-postman (up from 167), 8 consumer tests in camel-platform-http-vertx, -Psourcecheck clean, and a full build followed by the codegen chain leaves the tree clean.

Claude Code on behalf of @christosgkoros

@christosgkoros

Copy link
Copy Markdown
Contributor Author

@atiaomar1978-hub rebased onto latest main in 70a80ea — the branch was 51 commits behind and is now at 0. The rebase applied cleanly with no conflicts, and camel-4x-upgrade-guide-4_22.adoc has zero diff against main.

One clarification on the finding itself, for the record rather than to quibble: this PR never modified that file, so a merge would not have dropped the camel-mcp-server or camel-support sections.

$ git log <merge-base>..HEAD -- docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_22.adoc
(no commits)

The section was added in the first push and removed in the amend that addressed @davsclaus's review, so no commit on the branch touches the file. The 193-line difference you saw was the branch being stale relative to main, not a change the PR introduces. Rebasing was still the right call — it removes the ambiguity and revalidates against current main — so no objection to the request.

Post-rebase verification: full build plus the codegen chain leaves the tree clean, 170 tests in camel-rest-postman, 8 consumer tests in camel-platform-http-vertx, -Psourcecheck clean.

Worth noting one thing the rebase surfaced: regenerating the catalog after pulling in main produced an unrelated 55-line change to camel-spring.xsd (duplicate allowedSchemes attribute definitions). That is not from this PR — it is a local artefact of a partial build — so I reverted it and it is not in the branch. Flagging in case the duplicate definitions on main are worth a look separately.

Re-requesting review.

Claude Code on behalf of @christosgkoros

@atiaomar1978-hub

Copy link
Copy Markdown
Contributor

Updated review (post 70a80ea)

Re-reviewed after the latest push. Approve — prior request-changes items are resolved.

Fixed since last review

Item Status
Upgrade guide drift vs main Fixedcamel-4x-upgrade-guide-4_22.adoc has zero diff against apache/camel main
JIRA, exception wrapping, docs passthrough, derived file regen Fixed (per @davsclaus feedback)
PostmanVariableResolver placeholder-function injection ({{env:...}}, {{sys:...}}, {{bean:...}}) Fixed in 70a80eaisSafeToResolveAsProperty() blocks prefix:value names; covered by tests
Per-fetch HttpClient thread leak in PostmanCloudClient Fixed — client built once in constructor
Sub-exchange UoW leak in RestPostmanRunnerProducer FixedreleaseUnitOfWork(sub) in runner loop

Remaining (non-blocking)

  1. 405 / empty Allow on matched paths — author-documented gap when vert.x router handles wrong-method before the processor runs. Acceptable for v1; optional follow-up with platform-http.
  2. Branch name feat/camel-rest-postman-component vs feature/CAMEL-24367-... — convention only.

Highlights

  • Strong security design: separated Postman API key vs collection auth, redirect rejection, HTTPS enforcement, bounded reads, auth/secret redaction, no script execution
  • No new third-party dependencies
  • 167 component tests + 8 platform-http consumer tests
  • Clear component documentation

Ready for committer merge review.

AI-generated review on behalf of atiaomar1978-hub

@atiaomar1978-hub atiaomar1978-hub left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Prior request-changes items (upgrade guide rebase, placeholder-function security, HttpClient reuse, UoW cleanup) are addressed in 70a80ea. Approve for committer merge review.

@atiaomar1978-hub atiaomar1978-hub left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All prior feedback addressed in 70a80ea. Approve for merge.

@davsclaus

Copy link
Copy Markdown
Contributor

LGTM but we need to get 4.22.0 released first and then bump maven for 4.23 release, and after that this can be rebased and then adjusted to be 4.23 as well.

@christosgkoros

Copy link
Copy Markdown
Contributor Author

LGTM but we need to get 4.22.0 released first and then bump maven for 4.23 release, and after that this can be rebased and then adjusted to be 4.23 as well.

Thanks, I understand this PR was submitted right as the team was preparing for 4.22. I will update it when 4.23 hits main.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants